home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / perl / prlbkxmp.lha / ch6 / flealist < prev    next >
Text File  |  1991-01-08  |  4KB  |  154 lines

  1. #!/usr/bin/perl
  2.  
  3. $DATA = '/data';
  4.  
  5. chop($Date = `date`);
  6.  
  7. format TOP =
  8.             Camel's Breath Software
  9. @<<<<<<<<<<<<<<<<<<<<<<<<<<<<@||| @>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  10. $Product,                    $%,  $Date
  11. Flea#   Date   Disposition    Subject
  12.      Reported by                    Priority Assigned to
  13.      Phone & Address            Description
  14. ---------------------------------------------------------------
  15. .
  16.  
  17. format RECORD =
  18. @>>>> @||||||| @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  19. $Bug, $rdate,  $disp,         $subject
  20.      @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<  @<<<<<<<<<<<<<<<<<
  21.      $reporter,                     $prior,  $assigned
  22. ~    @<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  23.      $phone,                    $description
  24. ~    @<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  25.      shift(@addr),              $description
  26. ~    @<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  27.      shift(@addr),              $description
  28. ~    @<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  29.      shift(@addr),              $description
  30. ~    @<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  31.      shift(@addr),              $description
  32. ~                               ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  33.                 $description
  34. ~                               ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  35.                 $description
  36. ~                               ^<<<<<<<<<<<<<<<<<<<<<<<<<<<...
  37.                 $description
  38. .
  39.  
  40. # One summary record is printed for each product.
  41.  
  42. format SUMMARY =
  43. -------------------------
  44.   Summary for @<<<<<<<<<<<<<<<<<<<<<<<<<<<
  45.           $Product
  46.      Fixed = @<<<  Rej = @<<<  Hi = @<<<  Med = @<<<  Lo = @<<<
  47.          $Xfix,      $Xrej,     $Xhigh,     $Xmed,    $Xlow
  48. .
  49.  
  50. sub numerically { $a <=> $b; }
  51.  
  52. $^ = 'TOP';                    # Set top-of-form format.
  53.  
  54. chdir $DATA || die "Can't cd to $DATA: $!\n";
  55.  
  56. # Now we're ready to begin.  Scan our list of products.
  57.  
  58. PROD:
  59.   foreach $Productdir (<*>) {
  60.     reset 'X';                 # Zero out accumulators
  61.  
  62.     chdir "$DATA/$Productdir" || do {
  63.     warn "Can't cd to $Productdir: $!\n"; next PROD; };
  64.  
  65.     if (open(NAME, '.prodname')) {
  66.     chop($Product = <NAME>);
  67.     close NAME;
  68.     }
  69.     else {
  70.     ($Product = $Productdir) =~ tr/_/ /;
  71.     }
  72.  
  73.     opendir(DIR, '.') || do {
  74.     warn "Can't read $Product: $!\n"; next PROD; };
  75.  
  76.     @Buglist = sort numerically grep(/^\d+$/, readdir(DIR));
  77.     closedir(DIR);
  78.  
  79.     $~ = 'RECORD';             # Set format for normal records.
  80.  
  81.     # Now, iterate over the bug report files.
  82.  
  83.   BUG:
  84.     foreach $Bug (@Buglist) {
  85.     reset 'a-z';           # Clear scratch variables.
  86.  
  87.     open(BUGFILE, $Bug) || do {
  88.         warn "Can't open $Product/$Bug: $!\n";
  89.         next BUG;
  90.     };
  91.  
  92.       LINE:
  93.     while (<BUGFILE>) {
  94.         if    (/^Address:\s*(.*)/)
  95.         {@addr = split(/;\s*/, $1);}
  96.         elsif (/^Assigned-To:\s*(.*)/)
  97.         {$assigned = $1;}
  98.         elsif (/^Priority:\s*(.*)/)
  99.         {$prior    = $1;}
  100.         elsif (/^Phone:\s*(.*)/)
  101.         {$phone    = $1;}
  102.         elsif (/^Subject:\s*(.*)/)
  103.         {$subject  = $1;}
  104.         elsif (/^Reported-By:\s*(.*)/)
  105.         {$reporter = $1;}
  106.         elsif (/^Disposition:\s*(.*)/)
  107.         {$disp     = $1;}
  108.         elsif (/^Date-Received:\s*(.*)/)
  109.         {$rdate    = $1;}
  110.         elsif (/^Description:\s*(.*)/) {
  111.         $description = $1;
  112.  
  113.           DESCLINE:
  114.         while (<BUGFILE>) {
  115.             last DESCLINE if /^--/;
  116.             $description .= $_;
  117.         }
  118.  
  119.         # Make into one long line.
  120.  
  121.         $description =~ s/([.!?])\n\s*/$1  /g;
  122.         $description =~ s/\n\s*/ /g;
  123.         $description =~ s/^\s*//;
  124.         }
  125.     }
  126.  
  127.     # Accumulate stats about priorities and dispositions.
  128.  
  129.     if ($disp =~ /^open/i) {
  130.         $prior =~ /^hi/  && $Xhigh++;
  131.         $prior =~ /^med/ && $Xmed++;
  132.         $prior =~ /^lo/  && $Xlow++;
  133.     }
  134.     elsif ($disp =~ /^fixed/i) {
  135.         $Xfix++;
  136.     }
  137.     elsif ($disp =~ /^rej/i) {
  138.         $Xrej++;
  139.     }
  140.     elsif ($disp =~ /^void/i) {
  141.         next BUG;
  142.     }
  143.  
  144.     write;                 # Write one record's worth.
  145.     }
  146.  
  147.     $~ = 'SUMMARY';            # Select summary format.
  148.     write;                     # And write one of those.
  149.  
  150.     $- = 0;                    # Force formfeed on next record.
  151.  
  152.     chdir $DATA || die "Can't cd back to $DATA: $!\n";
  153. }
  154.